package com.njwb.day06;

import java.util.Scanner;

public class StudentInformationSystem {
    //初始化存放学生数据的学生数组
    static Student[] stus=new Student[0];

    public static void main(String[] args) {
        /*
            学生信息录入系统
            用于存放学生数据的学生数组：Student[] stus;
            功能：
            1.添加学生信息：学号、姓名、成绩
                          学号不能重复
            2.修改学生信息：根据学号修改姓名和成绩
                          学号是否存在的判断
            3.删除学生信息：根据学号删除对应学生
                          学号是否存在的判断
            4.查询所有学生信息
            5.根据学号查询学生信息
            6.根据姓名查询学生信息
            7.根据学生的成绩进行从大到小排序展示所有学生信息
            8.退出系统 System.exit(0)
            要求：
            对于正常操作的数据根据以上三个数组进行正常录入或查询
            对于条件不满足的一些情形通过错误对用户做出错误提示
         */
        //int:sc.nextInt();
        //String:sc.nextLine();
        //double:sc.nextDouble();

        Scanner sc=new Scanner(System.in);
        System.out.println("##欢迎来到学生信息录入系统##");
        while(true){
            System.out.println("1.添加学生信息");
            System.out.println("2.修改学生信息");
            System.out.println("3.删除学生信息");
            System.out.println("4.查询所有学生信息");
            System.out.println("5.根据学号查询学生信息");
            System.out.println("6.根据姓名查询学生信息");
            System.out.println("7.根据学生的成绩进行从大到小排序展示所有学生信息");
            System.out.println("8.退出系统");
            System.out.println("请选择：");
            int choose=sc.nextInt();
            switch (choose){
                case 1:
                    addStudent();
                    break;
                case 2:
                    findAllStudents();
                    modifyStudentByNo();
                    break;
                case 3:
                    findAllStudents();
                    removeStudentByNo();
                    break;
                case 4:
                    findAllStudents();
                    break;
                case 5:
                    findStudentByNo();
                    break;
                case 6:
                    findStudentByName();
                    break;
                case 7:
                    findStudentByScore();
                    break;
                case 8:
                    System.out.println("欢迎下次使用...");System.exit(0);break;
                default:
                    System.out.println("输入有误！请重新输入");
            }

        }
    }

    //根据学生的成绩进行从大到小排序展示所有学生信息
    public static void findStudentByScore() {
        Student[] tempStus = stus;
        for (int i = 0; i < tempStus.length - 1; i++) {
            for (int j = i + 1; j < tempStus.length; j++) {
                //当前位置学生
                Student stu=tempStus[i];
                //当前位置学生的成绩
                double dq = stu.getScore();
                //需要比的学生
                Student stu2=tempStus[j];
                //需要比的学生位置的成绩
                double bj = stu2.getScore();
                if (dq > bj) {
                    //学生排序
                    Student tempStu = tempStus[i];
                    tempStus[i] = tempStus[j];
                    tempStus[j] = tempStu;
                }
            }
        }

        System.out.println("学号\t姓名\t成绩");
        for (int i=0;i<stus.length;i++){
            System.out.println(stus[i].getNo()+"\t"+stus[i].getName()+"\t"+stus[i].getScore());
        }
    }

    //根据学号查询学生信息
    public static void findStudentByNo(){
        Scanner sc=new Scanner(System.in);
        //学号
        System.out.println("请输入整数的学号：");
        int no=sc.nextInt();
        int index=-1;
        boolean flag=false;
        for (int i=0;i<stus.length;i++){
            if(no==stus[i].getNo()){
                //根据输入的学号确定需要删除的下标位置
                index=i;
                flag=true;
                break;
            }
        }
        //经过上面循环并没有找到对应的学生
        if(!flag){
            System.out.println("当前学生不存在！");
            return;
        }
        System.out.println("学号\t姓名\t成绩");
        Student stu=stus[index];
        System.out.println(stu.getNo()+"\t"+stu.getName()+"\t"+stu.getScore());
    }

    //根据姓名查询学生信息
    public static void findStudentByName(){
        Scanner sc=new Scanner(System.in);
        //学号
        System.out.println("请输入字符串的姓名：");
        String name=sc.next();
        int index=-1;
        boolean flag=false;
        for (int i=0;i<stus.length;i++){
            if(name.equals(stus[i].getName())){
                //根据输入的学号确定需要删除的下标位置
                index=i;
                flag=true;
                break;
            }
        }
        //经过上面循环并没有找到对应的学生
        if(!flag){
            System.out.println("当前学生不存在！");
            return;
        }
        System.out.println("学号\t姓名\t成绩");
        System.out.println(stus[index].getNo()+"\t"+stus[index].getName()+"\t"+stus[index].getScore());
    }

    //删除学生信息
    public static void removeStudentByNo(){
        Scanner sc=new Scanner(System.in);
        //学号
        System.out.println("请输入整数的学号：");
        int no=sc.nextInt();
        int index=-1;
        boolean flag=false;
        for (int i=0;i<stus.length;i++){
            if(no==stus[i].getNo()){
                //根据输入的学号确定需要删除的下标位置
                index=i;
                flag=true;
                break;
            }
        }
        //经过上面循环并没有找到对应的学生
        if(!flag){
            System.out.println("当前学生不存在！");
            return;
        }
        //自定义临时学生数组比原来学生数组长度-1
        Student[] tempStus=new Student[stus.length-1];
        for (int i=0;i<tempStus.length;i++){
            if(i<index){
                tempStus[i]=stus[i];
            }else{
                tempStus[i]=stus[i+1];
            }
        }
        //将临时学生数组的数据交给初始化的学生数组变量
        stus=tempStus;
        System.out.println("学号："+no+"的信息删除完毕...");
    }

    //修改学生信息
    public static void modifyStudentByNo(){
        Scanner sc=new Scanner(System.in);
        //学号
        System.out.println("请输入整数的学号：");
        int no=sc.nextInt();
        boolean flag=false;
        //记录需要修改的学生所在数组的位置
        int index=-1;
        for (int i=0;i<stus.length;i++){
            if(no==stus[i].getNo()){
                //找到需要修改的学生学号
                flag=true;
                index=i;
                break;
            }
        }
        //经过上面循环没有找到对应学号
        if(!flag){
            System.out.println("当前学生不存在！");
            return;
        }
        //姓名
        System.out.println("请输入字符串的姓名：");
        String name=sc.next();
        //成绩
        System.out.println("请输入小数的成绩：");
        double score=sc.nextDouble();
        //根据确定的下标位置修改对应学生信息
        stus[index].setNo(no);
        stus[index].setName(name);
        stus[index].setScore(score);
        System.out.println("学号："+no+"的信息修改完毕...");
    }

    //录入学生信息
    public static void addStudent(){
        Scanner sc=new Scanner(System.in);
        //学号
        System.out.println("请输入整数的学号：");
        int no=sc.nextInt();
        //学号重复性录入
        for (int i=0;i<stus.length;i++){
            Student stu=stus[i];
            if(no==stu.getNo()){
                System.out.println("学号重复请重新录入...");
                return;
            }
        }
        //姓名
        System.out.println("请输入字符串的姓名：");
        String name=sc.next();
        //成绩
        System.out.println("请输入小数的成绩：");
        double score=sc.nextDouble();
        //动态数组
        //自定义临时学生数组比原来数组长度+1
        Student[] tempStus=new Student[stus.length+1];
        //将原学生数组的每一个学生对象拷贝到临时学生数组中
        for (int i=0;i< stus.length;i++){
            tempStus[i]=stus[i];
        }
        //将输入的学号姓名成绩存放到学生对象中再追加到临时学生数组末尾
        Student stu=new Student(no,name,score);
        tempStus[tempStus.length-1]=stu;
        //将临时数组的数据交给初始化的数组变量
        stus=tempStus;
        System.out.println("学生信息添加成功...");
    }

    //查询所有学生信息
    public static void findAllStudents(){
        //判断有没有录入学生信息
        if(stus.length==0){
            System.out.println("暂时没有录入任何学生信息...");
        }else{
            //展示所有学生
            //System.out.println("打印所有学生信息...");
            System.out.println("学号\t姓名\t成绩");
            for (int i=0;i<stus.length;i++){
                //获取每一个学生对象
                Student stu=stus[i];
                System.out.println(stu.getNo()+"\t"+stu.getName()+"\t"+stu.getScore());
            }
        }
    }
}
